home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / GFXFX2.ZIP / SCR_DYPP.PAS < prev    next >
Pascal/Delphi Source File  |  1995-02-14  |  2KB  |  99 lines

  1.  
  2. program _dypp; { SCR_DYPP.PAS }
  3. { Fast DYPP, including scroll, by Bas van Gaalen }
  4. uses u_vga,u_kb;
  5. const
  6.   border=false;
  7.   amp1=20; amp2=8;
  8.   spd1=2; spd2=4;
  9.   slen1=250; slen2=180; { experiment with these, keep below byte-size (255) }
  10.   lines=23; lineoffset=4;
  11.   txt:string='This thing is called a DYPP: Different-Y-Pixel-Position... '+
  12.     ' Uh huh huh huh m... Hey Beavis, you said ''Pixel''!                ';
  13. type styp = array[0..255] of integer;
  14. var
  15.   bitmap:array[0..lines*320-1] of byte;
  16.   cpos:array[0..319] of word;
  17.   stab1,stab2:styp;
  18.  
  19. procedure init;
  20. var i:word; j:byte;
  21. begin
  22.   setvideo($13);
  23.   getfont(font8x16);
  24.   for j:=0 to slen1 do stab1[j]:=round(sin(2*j*pi/slen1)*amp1)+amp1;
  25.   for j:=0 to slen2 do stab2[j]:=round(sin(2*j*pi/slen2)*amp2)+amp2;
  26.   fillchar(bitmap,sizeof(bitmap),0);
  27. end;
  28.  
  29. procedure drawmap; assembler;
  30. { for j:=0 to 11 do for i:=0 to 319 do
  31.     mem[u_vidseg:cpos[i]+j*320]:=bitmap[j,i];}
  32. var _cx:word;
  33. asm
  34.   mov es,u_vidseg
  35.   xor cx,cx                  { i (0 -> 319) }
  36.  @l0:
  37.   xor dx,dx                  { j (0 -> 11) }
  38.   mov si,cx
  39.   add si,cx
  40.   mov di,word ptr cpos[si]
  41.   mov si,cx
  42.  @l1:
  43.   mov al,byte ptr bitmap[si]
  44.   mov [es:di],al
  45.   add si,320
  46.   add di,320
  47.   inc dl
  48.   cmp dl,lines
  49.   jne @l1
  50.   inc cx
  51.   cmp cx,319
  52.   jne @l0
  53. end;
  54.  
  55. procedure scrollbitmap(var map); assembler;
  56. asm
  57.   lds si,map
  58.   les di,map
  59.   inc si
  60.   add si,lineoffset*320
  61.   add di,lineoffset*320
  62.   mov cx,2560
  63.   rep movsw
  64. end;
  65.  
  66. procedure dypp;
  67. var i:word; j,idx,idx2,scridx,ch,cp:byte;
  68. begin
  69.   idx:=0; idx2:=0; cp:=7; scridx:=1; ch:=byte(txt[scridx]);
  70.   {u_border:=true;}
  71.   repeat
  72.     vretrace;
  73.     setborder(44);
  74.     for i:=0 to 319 do
  75.       cpos[i]:=320*(stab1[(i+idx) mod slen1]+stab2[(i+idx2) mod slen2])+i;
  76.     idx:=spd1+idx mod slen1; idx2:=spd2+idx2 mod slen2;
  77.     setborder(40);
  78.     scrollbitmap(bitmap);
  79.     setborder(36);
  80.     for j:=0 to 15 do
  81.       bitmap[(lineoffset+j)*320+319]:=
  82.         ((mem[seg(font^):ofs(font^)+ch*16+j] shr cp) and 1)*(32+cp+j+scridx mod 60);
  83.     dec(cp); cp:=cp mod 8;
  84.     if cp=0 then begin
  85.       scridx:=1+scridx mod length(txt);
  86.       ch:=byte(txt[scridx]);
  87.     end;
  88.     setborder(32);
  89.     drawmap;
  90.     setborder(0);
  91.   until keypressed;
  92. end;
  93.  
  94. begin
  95.   init;
  96.   dypp;
  97.   setvideo(u_lm);
  98. end.
  99.